package com.home_school_platform.dao;

import com.home_school_platform.entity.pojo.Student;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 学生Dao接口
 * @author 卓汉杰
 * */
@Repository
@Mapper
public interface StudentDao {

    /**
     * 插入一条学生数据
     * @param student 学生实体
     * @return 影响行数
     * */
    Integer insertStudent(Student student);

    /**
     * 根据ID删除学生
     * @param id 需要删除的学生的id
     * @return 影响行数
     * */
    Integer deleteStudentById(Integer id);

//    /**
//     * 根据姓名删除
//     * @param studnetName 学生名字
//     * @return 影响行数
//     * */
//    Integer deleteStudentByName(Student studnetName);

    /**
     * 根据实体中的id修改学生
     * @param student 需要修改的学生实体
     * @return 影响行数
     * */
    Integer updateStudentById(Student student);

    /**
     * 根据家长手机号查询学生实体
     * @param parentPhone 查询的学生的id
     * @return 对应的学生的实体
     * */
    List<Student> getStudentByParentPhone(String parentPhone);

    /**
     * 根据Id查询学生实体
     * @param id 查询的学生的id
     * @return 对应的学生的实体
     * */
    Student getStudentById(Integer id);

    /**
     * 查找学校所有的学生
     * @param schoolName 学校名称
     * @param currentPage 当前页
     * @param pageSize 每页显示多少条记录
     * @return 学生列表
     * */
    List<Student> listStudent(@Param("schoolName") String schoolName,
                              @Param("currentPage") Integer currentPage,
                              @Param("pageSize") Integer pageSize);

    /**
     * 统计学校所有的学生
     * @param schoolName 学校名称
     * @return 学生数量
     * */
    Integer countStudent(String schoolName);

    /**
     *  根据学校和班级查找学生
     * @param schoolName 学校名称
     * @param teamId 班级id
     * @param currentPage 当前页
     * @param pageSize 每页显示多少条记录
     * @return 学生列表
     * */
    List<Student> listStudentByTeamId(@Param("schoolName") String schoolName,
                                      @Param("teamId") Integer teamId,
                                      @Param("currentPage") Integer currentPage,
                                      @Param("pageSize") Integer pageSize);

    /**
     *  根据学校和班级查找学生的数量
     * @param schoolName 学校名称
     * @param teamId 班级id
     * @return 学生数量
     * */
    Integer countStudentByTeamId(@Param("schoolName") String schoolName,
                                 @Param("teamId") Integer teamId);



    /**
     * 根据姓名在学校范围内模糊查询
     * @param schoolName 学校名称
     * @param studentName 学生名字
     * @param currentPage 当前页
     * @param pageSize 每页显示多少条记录
     * @return 学生列表
     */
    List<Student> listStudentLikeName(@Param("schoolName") String schoolName ,
                                      @Param("studentName") String studentName ,
                                      @Param("currentPage") Integer currentPage ,
                                      @Param("pageSize") Integer pageSize);

    /**
     * 根据姓名在学校范围内模糊查询
     * @param schoolName 学校名称
     * @param studentName 学生名字

     * @return 学生数量
     */
    Integer countStudentLikeName(@Param("schoolName") String schoolName ,
                                 @Param("studentName") String studentName );


    /**
     *  在班级范围内根据姓名模糊查找学生
     * @param schoolName 学校名称
     * @param teamId 班级id
     * @param studentName 学生名字
     * @param currentPage 当前页
     * @param pageSize 每页显示多少条记录
     * @return 学生列表
     * */
    List<Student> listStudentByTeamIdLikeName(@Param("schoolName") String schoolName,
                                              @Param("teamId") Integer teamId,
                                              @Param("studentName") String studentName ,
                                              @Param("currentPage") Integer currentPage,
                                              @Param("pageSize") Integer pageSize);


    /**
     *  在班级范围内根据姓名模糊查找学生的数量
     * @param schoolName 学校名称
     * @param teamId 班级id
     * @param studentName 学生名字
     * @return 学生数量
     * */
    Integer countStudentByTeamIdLikeName(@Param("schoolName") String schoolName,
                                         @Param("teamId") Integer teamId,
                                         @Param("studentName") String studentName
                                        );

}
